#ifndef _CAR_H
#define _CAR_H

#include "level.h"

typedef struct {
	f1616 x,y,z; /* Location */
	f1616 xd,yd,zd; /* Velocity */
	f1616 ang; /* Rotation */
	gp_spr *spr; /* Sprite */
	int lap; /* Laps completed */
	int check; /* Last check point passed */
	int player; /* Player number: <0=AI, 0=none, >0=human */
	int check_time; /* Time the last checkpoint was passed */
	int hint; /* Last hint passed */
	int lap_time; /* Time the last lap was completed */
} car;

#define MAX_CAR 8

#define CAR_HEIGHT 0x10000

extern car cars[MAX_CAR]; /* All cars */
extern int car_l,car_w; /* Car length & width */
extern int car_rad; /* Car radius */
extern int car_accel; /* Acceleration, units/sec */
extern float car_break; /* Breaking, percentage/sec */
extern float car_friction; /* Friction, percentage/sec */
extern int car_turn; /* Turn rate, degrees/sec */
extern gp_spr *car_shadow; /* Shadow sprite */

extern int init_cars(level *l,char *name); /* Initialise the cars, for the given level. Returns !0 on failure */
extern void shutdown_cars(); /* Shut down the cars */
extern void draw_cars(level *l,gp_screen *s,int x,int y); /* Draw cars to screen, with camera focused on pixel x,y */
extern int car_collide(int a,int b); /* Return true if a and b are colliding */
extern int sideofline(f1616 x1,f1616 y1,f1616 x2,f1616 y2,f1616 x,f1616 y);

#endif
